package com.xiaoniu.lib_keleim.channel;

import android.os.Handler;
import android.os.Looper;
import android.util.Log;

import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.WebSocket;
import okhttp3.WebSocketListener;
import okio.ByteString;

//public class WebSocketClient extends WebSocketListener {
//
//    private final String TAG = WebSocketClient.class.getSimpleName();
//
//    private OkHttpClient CLIENT;
//    private WebSocket mWebSocket;
//    Handler mHandler = new Handler(Looper.myLooper());
//    boolean isConnect = false;
//    byte mRetryCount = 0;
//    private OnReceive onReceive;
//    String url;
//    private static final WebSocketClient ourInstance = new WebSocketClient();
//
//    public static WebSocketClient getDefault() {
//        return ourInstance;
//    }
//
//    private WebSocketClient() {
//        CLIENT = new OkHttpClient.Builder()
//                .writeTimeout(5, TimeUnit.SECONDS)
//                .readTimeout(5, TimeUnit.SECONDS)
//                .connectTimeout(5, TimeUnit.SECONDS)
//                .build();
//    }
//
//    public void connect(String url, OnReceive onReceive) {
//        this.onReceive = onReceive;
//        this.url = url;
//
//        if (mWebSocket != null) {
//            mWebSocket.cancel();
//        }
//        request(url);
//    }
//
//    private void request(String url) {
//        Log.d(TAG,"发起SOCKET连接 "+ url);
//        Request request = new Request.Builder()
//                .url(url)
//                .build();
//        mWebSocket = CLIENT.newWebSocket(request, this);
//    }
//
//    public void sendMessage(String message) {
//        Log.d(TAG,"发送消息 "+ message);
//        if (isConnect) {
//            mWebSocket.send(message);
//        }
//    }
//
//    public void sendMQMessage(String topic,String message) {
//        Log.d(TAG, String.format("发送消息 topic %s %s", topic,message));
//        if (isConnect) {
//            MqttClient.getInstance().publishMessage(topic,message);
//        }
//    }
//
//    public void subscribeToTopic(String topic) {
//        Log.d(TAG, String.format("订阅 topic %s", topic));
//        if (isConnect) {
//            MqttClient.getInstance().subscribeToTopic(topic);
//        }
//    }
//
//    public void unSubscribeTopic(String topic) {
//        Log.d(TAG, String.format("解除 topic %s", topic));
//        if (isConnect) {
//            MqttClient.getInstance().unSubscribeTopic(topic);
//        }
//    }
//
//    public void sendMessage(byte[] data) {
//        ByteString bs = ByteString.of(data);
//        mWebSocket.send(bs);
//    }
//
//    public void close(int code, String reason) {
//        mWebSocket.close(code, reason);
//    }
//
//
//    public interface OnReceive {
//        void onReceive(byte[] receice);
//
//        void onReceive(String receice);
//    }
//
//
//    @Override
//    public void onOpen(WebSocket webSocket, Response response) {
//        super.onOpen(webSocket, response);
//        isConnect = true;
//        mRetryCount = 0;
//        Log.d(TAG,"连接成功 "+ response);
//    }
//
//    @Override
//    public void onMessage(WebSocket webSocket, String text) {
//        super.onMessage(webSocket, text);
//        Log.d(TAG,"收到消息 "+ text);
//        mHandler.post(new Runnable() {
//            @Override
//            public void run() {
//                if (onReceive != null) {
//                    onReceive.onReceive(text);
//                }
//            }
//        });
//
//    }
//
//    @Override
//    public void onMessage(WebSocket webSocket, ByteString bytes) {
//        super.onMessage(webSocket, bytes);
//        Log.d(TAG,"收到消息 bytes"+ bytes);
//        if (onReceive != null) {
//            onReceive.onReceive(bytes.toByteArray());
//        }
//    }
//
//    @Override
//    public void onClosing(WebSocket webSocket, int code, String reason) {
//        super.onClosing(webSocket, code, reason);
//        Log.d(TAG,"连接关闭中 code "+ code + " reason "+ code);
//        isConnect = false;
//    }
//
//    @Override
//    public void onClosed(WebSocket webSocket, int code, String reason) {
//        super.onClosed(webSocket, code, reason);
//        Log.d(TAG,"连接关闭 code "+ code + " reason "+ code);
//        isConnect = false;
//        retry();
//    }
//
//    @Override
//    public void onFailure(WebSocket webSocket, Throwable t, Response response) {
//        super.onFailure(webSocket, t, response);
//        Log.i(TAG, "连接失败 t=" + t.getMessage());
//        isConnect = false;
//
//        retry();
//    }
//
//    private void retry() {
//        mRetryCount++;
//        if (mRetryCount==20) {
//            return;
//        }
//        mHandler.postDelayed(new Runnable() {
//            @Override
//            public void run() {
//                if (!isConnect) {
//                    request(url);
//                }
//            }
//        }, 5000);
//    }
//
//
//}